package ar.org.cfired.creditos.schedulers;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.TaskService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerContext;
import java.util.HashMap;
import ar.org.cfired.creditos.gui.ContenedorMensajes;
import ar.org.cfired.creditos.gui.Mensaje;
import ar.org.cfired.hibernate.utils.HibernateUtil;
public class RutearDocumentosVencidos implements Job {
	private Logger objetoLogger = Logger.getLogger(this.getClass().getName());
	public void execute(JobExecutionContext context) throws JobExecutionException{

		List<Double> respuesta = null;
		Transaction tx = null;
		Session session = null;
		HashMap<String, Object> vars;
		ContenedorMensajes contenedor;
		Mensaje mensaje;
		
		ProcessEngine processEngine = null;	
		try {
			objetoLogger.info("Scheduler para mover documentos vencidos del Solicitante - Por iniciar sesion");
			session = HibernateUtil.getSessionFactory().getCurrentSession(); //.openSession();
			tx = session.beginTransaction();
				objetoLogger.info("Scheduler de Creditos - Transaccion iniciada");
				respuesta = (List<Double>) session.getNamedQuery("sql_documentos_vencidos_solicitante").list();
			session.close();
			objetoLogger.info( "Scheduler de Creditos -  " + respuesta.size() + " documento(s) a mover" );
		
		
		   if (respuesta.size() > 0) {
				 SchedulerContext contexto = context.getScheduler().getContext();
				 processEngine = (ProcessEngine)contexto.get("jbpmProcessEngine");
				 if (processEngine == null) {
					System.out.println("Genero");
					processEngine = new Configuration().buildProcessEngine();
					//context.put("jbpmProcessEngine", processEngine);
					contexto.put("jbpmProcessEngine", processEngine);
				 }
				 
				 TaskService ts = processEngine.getTaskService();
				 for (int i = 0; i<respuesta.size(); i++) {
					contenedor = new ContenedorMensajes();
					mensaje = new Mensaje();
					mensaje.setTipo(Mensaje.TIPO_ALERTA);
					mensaje.setSeguridad(3);
					mensaje.setOficina("9");
					mensaje.setMensaje("El documento es remitido a la Unidad de Enlace ya que el solicitante no ha completado su tarea durante el tiempo establecido");
					
					vars = new HashMap<String, Object>();
					vars.put(ar.org.cfired.creditos.gui.ContenedorMensajes.CODIGO_MENSAJE_LOG_SBSA, (Object)mensaje);
					ts.setVariables(String.valueOf(respuesta.get(i)), vars);
					
					if (ts.getTask(String.valueOf(respuesta.get(i))).getActivityName().equals("Formulacion del Proyecto"))
						ts.completeTask(String.valueOf(respuesta.get(i)), "Enviar");
					else
						ts.completeTask(String.valueOf(respuesta.get(i)), "solAceptar");
				 }
		   }
		
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
